<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

// 1
function Foo(){
  getName = function(){
    alert(1)
  }
  return this
}

// 2
Foo.getName = function(){
  alert(2)
}
// 3
Foo.prototype.getName = function(){
  alert(3)
}
// 4
var getName = function(){
  alert(4)
}
// 5
function getName(){
  alert(5)
}

// 题干
Foo.getName()
getName()
Foo().getName()
getName()
new Foo.getName()
new Foo().getName()

/**
 * 解释：
 * 根据函数提升和变量提升的原则，题干将变成以下顺序
 * 
 * 
function Foo(){
  getName = function(){
    alert(1)
  }
  return this
}
 * 
function getName(){
  alert(5)
}
 * 
var getName
 * 
Foo.getName = function(){
  alert(2)
}
 * 
Foo.prototype.getName = function(){
  alert(3)
}
 * 
getName = function(){
  alert(4)
}
 * 
* 所以执行的是：2/（5-4）4/1/1（因为this,所以里面的函数在window最后执行，会覆盖其他）/2（直接执行，跟Fo'o()函数没有任何关系）/3 Foo（）
*/




  </script>
</body>
</html>